package com.tju.resource.tool.tool;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.util.Units;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;

public class WeightParser {

    public enum Units {
        mg("mg"),
        g("g"),
        KG("KG"),
        T("T");

        private final String str;

        Units(String str) {
            this.str = str;
        }
    }

    private final static List<Units> ascUnit = new ArrayList<>() {{
        add(Units.mg);
        add(Units.g);
        add(Units.KG);
        add(Units.T);
    }};

    public static Units toUnit(String str) {
        if (StringUtils.equals(str, "mg"))
        {
            return Units.mg;
        }
        else if (StringUtils.equals(str, "g")) {
            return Units.g;
        } else if (StringUtils.equals(str, "KG")){
            return Units.KG;
        } else if (StringUtils.equals(str, "T")){
            return Units.T;

        } else {
            throw new UnsupportedOperationException(String.format("%s 重量单位吧不存在", str));
        }
    }

    public static Double parse(Double val, Units p, Units p1) {
        int li = ascUnit.indexOf(p);
        int ri = ascUnit.indexOf(p1);
        BigDecimal v = new BigDecimal(Double.toString(val));

        if (li > ri) {
            int i = li - ri;
            BigDecimal ret = v;

            for (int i2 = 0; i2 < i; i2++) {
                ret = ret.multiply(new BigDecimal("1000.0"));
            }

            return ret.doubleValue();
        } else if (li < ri) {
            int i = ri - li;
            BigDecimal ret = v;

            for (int i2 = 0; i2 < i; i2++) {
                ret= ret.divide(new BigDecimal("1000.0"));
            }

            return ret.doubleValue();
        } else {
            return val;
        }
    }

}
